package com.lab.entity;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 实验室成员实体类（映射数据库member表）
 * 存储实验室成员的基本信息，包括姓名、年级、专业等核心属性
 */
@Data
public class Member {

    /**
     * 主键ID（自增）
     * 对应数据库表字段：id INT NOT NULL AUTO_INCREMENT
     */
    private Integer id;

    /**
     * 成员姓名
     * 对应数据库表字段：name VARCHAR(50) NOT NULL
     * 存储成员的真实姓名，非空且长度不超过50字符
     */
    private String name;

    /**
     * 年级
     * 对应数据库表字段：grade VARCHAR(20) NOT NULL
     * 表示成员的年级信息（如"2022级"、"研一"等），非空约束
     */
    private String grade;

    /**
     * 专业
     * 对应数据库表字段：major VARCHAR(50) NOT NULL
     * 存储成员的专业名称（如"计算机科学与技术"），非空约束
     */
    private String major;

    /**
     * 学号（唯一）
     * 对应数据库表字段：student_id VARCHAR(30) NOT NULL
     * 数据库唯一约束（uk_member_student_id），11位数字（业务约定），用于唯一标识学生身份
     */
    private String studentId;

    /**
     * 角色类型
     * 对应数据库表字段：role_type VARCHAR(20) NOT NULL
     * 表示成员在实验室的角色（如"前端"、"后端"、"算法"等），用于区分工作方向
     */
    private String roleType;

    /**
     * 是否请假（状态标识）
     * 对应数据库表字段：is_on_leave TINYINT NOT NULL DEFAULT 0
     * 取值：0（否，默认）、1（是），用于快速标识成员当前是否处于请假状态
     */
    private Integer isOnLeave;

    /**
     * 密码（加密存储）
     * 对应数据库表字段：password VARCHAR(100) NOT NULL
     * 存储加密后的密码（如BCrypt哈希值），不存储明文，确保安全性
     */
    private String password;

    /**
     * 创建时间
     * 对应数据库表字段：create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
     * 记录成员信息添加到系统的时间，由数据库自动生成
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 对应数据库表字段：update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
     * 记录成员信息最后一次修改的时间，由数据库自动更新
     */
    private LocalDateTime updateTime;

    /**
     * 登录角色
     * 对应数据库表字段：role VARCHAR(20) NOT NULL DEFAULT 'user'
     * 表示成员的系统登录角色，限定值为：admin（管理员）、student（学生）、teacher（老师）
     * 用于控制系统操作权限（如管理员可编辑所有成员，学生仅可查看）
     */
    private String role;
}